স্প্রিং ক্লাউড (Spring Cloud) ব্যবহার করতে হলে নির্দিষ্ট কিছু ডিপেন্ডেন্সি এবং কনফিগারেশন সেটআপ করতে হয়, যা আপনার স্প্রিং বুট অ্যাপ্লিকেশনকে মাইক্রোসার্ভিস আর্কিটেকচার ব্যবস্থাপনায় সহায়তা করবে। স্প্রিং ক্লাউড এর বিভিন্ন কম্পোনেন্ট এবং তাদের কনফিগারেশন বিভিন্ন মাইক্রোসার্ভিস এর জন্য গুরুত্বপূর্ণ। নিচে স্প্রিং ক্লাউডের সাধারণ ডিপেন্ডেন্সি এবং কনফিগারেশন দেখানো হলো।
১. Spring Cloud Config
কাজ: কেন্দ্রীভূত কনফিগারেশন ম্যানেজমেন্ট
ডিপেন্ডেন্সি:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
কনফিগারেশন (application.yml):
spring:
cloud:
config:
uri: http://localhost:8888 # Config server URI
label: master
name: config-repo
২. Spring Cloud Netflix Eureka (Service Discovery)
কাজ: সার্ভিস ডিসকভারি
ডিপেন্ডেন্সি:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
কনফিগারেশন (application.yml):
spring:
application:
name: eureka-server
cloud:
eureka:
client:
fetch-registry: false
register-with-eureka: false
server:
enable-self-preservation: false
Eureka সার্ভার চালু করতে, @EnableEurekaServer ব্যবহার করুন:
@EnableEurekaServer
@SpringBootApplication
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class, args);
}
}
৩. Spring Cloud Netflix Ribbon (Client-Side Load Balancing)
কাজ: ক্লায়েন্ট সাইড লোড ব্যালান্সিং
ডিপেন্ডেন্সি:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
কনফিগারেশন (application.yml):
spring:
cloud:
loadbalancer:
ribbon:
enabled: true
Ribbon ব্যবহার:
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
@LoadBalanced ব্যবহার করলে Ribbon-এর লোড ব্যালান্সিং সিস্টেম অটোমেটিকালি সক্রিয় হয়ে যাবে।
৪. Spring Cloud Netflix Zuul (API Gateway)
কাজ: API গেটওয়ে ও রিভার্স প্রোক্সি
ডিপেন্ডেন্সি:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-zuul</artifactId>
</dependency>
কনফিগারেশন (application.yml):
zuul:
routes:
service1:
path: /service1/**
url: http://localhost:8081
service2:
path: /service2/**
url: http://localhost:8082
Zuul-এ গেটওয়ে সক্ষম করতে:
@EnableZuulProxy
@SpringBootApplication
public class ApiGatewayApplication {
public static void main(String[] args) {
SpringApplication.run(ApiGatewayApplication.class, args);
}
}
৫. Spring Cloud Gateway (API Gateway)
কাজ: মডার্ন API গেটওয়ে এবং রাউটিং
ডিপেন্ডেন্সি:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
কনফিগারেশন (application.yml):
spring:
cloud:
gateway:
routes:
- id: service1
uri: http://localhost:8081
predicates:
- Path=/service1/**
- id: service2
uri: http://localhost:8082
predicates:
- Path=/service2/**
৬. Spring Cloud Stream (Event-Driven Microservices)
কাজ: ইভেন্ট-ভিত্তিক আর্কিটেকচার
ডিপেন্ডেন্সি:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-stream-kafka</artifactId>
</dependency>
কনফিগারেশন (application.yml):
spring:
cloud:
stream:
bindings:
output:
destination: myTopic
content-type: application/json
kafka:
binder:
brokers: localhost:9092
৭. Spring Cloud Sleuth (Distributed Tracing)
কাজ: সার্ভিস কল ট্রেসিং
ডিপেন্ডেন্সি:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
কনফিগারেশন (application.yml):
spring:
cloud:
sleuth:
sampler:
probability: 1.0 # 100% sampling
৮. Spring Cloud Hystrix (Circuit Breaker)
কাজ: সার্ভিস ফেইলিউর হ্যান্ডলিং এবং Circuit Breaker প্যাটার্ন
ডিপেন্ডেন্সি:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
কনফিগারেশন (application.yml):
hystrix:
command:
default:
execution:
isolation:
thread:
timeoutInMilliseconds: 1000 # Timeout for commands
Hystrix এর ব্যবহার:
@HystrixCommand(fallbackMethod = "fallbackMethod")
public String getServiceData() {
// service call
}
public String fallbackMethod() {
return "Fallback response due to failure";
}
৯. Spring Cloud Bus
কাজ: ডিস্ট্রিবিউটেড সিস্টেমে কনফিগারেশন ও ইভেন্ট শেয়ারিং
ডিপেন্ডেন্সি:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus</artifactId>
</dependency>
কনফিগারেশন:
spring:
cloud:
bus:
enabled: true
stream:
bindings:
output:
destination: myTopic
১০. Spring Cloud Security (Authentication and Authorization)
কাজ: সার্ভিস সিকিউরিটি
ডিপেন্ডেন্সি:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-oauth2</artifactId>
</dependency>
কনফিগারেশন:
spring:
security:
oauth2:
client:
registration:
google:
client-id: <your-client-id>
client-secret: <your-client-secret>
scope: profile, email
redirect-uri: "{baseUrl}/login/oauth2/code/{registrationId}"
সারাংশ:
স্প্রিং ক্লাউড ব্যবহারের জন্য সাধারণত এই ডিপেন্ডেন্সি ও কনফিগারেশনগুলি প্রয়োজন:
- Config Server: কনফিগারেশন ব্যবস্থাপনা।
- Eureka Server: সার্ভিস ডিসকভারি।
- Ribbon: ক্লায়েন্ট সাইড লোড ব্যালান্সিং।
- Zuul/Gateway: API গেটওয়ে এবং রাউটিং।
- Stream: ইভেন্ট ড্রিভেন কমিউনিকেশন।
- Hystrix: Circuit Breaker প্যাটার্ন।
- Sleuth: ডিস্ট্রিবিউটেড ট্রেসিং।
- Security: সিকিউরিটি এবং অথেনটিকেশন।
এই ডিপেন্ডেন্সি ও কনফিগারেশন গুলি স্প্রিং ক্লাউডের বিভিন্ন ফিচারগুলো সঠিকভাবে কাজ করতে সাহায্য করবে, এবং মাইক্রোসার্ভিস আর্কিটেকচার তৈরি করতে সহায়ক হবে।
Read more